package com.edu.learning.singleton;

/**
 * 懒汉式单例类
 *
 * 加载过程：
 * 在第一次调用getInstance方法之前，SingletonWrapper类是没有加载的，因为它是一个静态内部类。
 * 当有线程第一次调用getInstance的时候，SingletonWrapper就会被classLoader加载进JVM，
 * 在加载的同时，执行instance的初始化。
 *
 * 线程安全：
 * 类的加载的过程是单线程执行的。它的并发安全是有JVM保证的。
 * 所有，懒汉模式是在instance初始化的过程中，由JVM的类加载机制保证了线程安全，
 * 而在初始化完成以后，不管后面多少次调用getInstance方法都不会再遇到锁的问题了。
 *
 * @author ll
 * @Date 2017/11/15 9:59
 */
public class LazySingleton {
    public static LazySingleton instance;

    private static class SingletonWrapper {
        static LazySingleton instance = new LazySingleton();
    }

    private LazySingleton() {
    }

    public static LazySingleton getInstance() {
        return SingletonWrapper.instance;
    }
}
